#!/usr/bin/env node
const fs = require('fs');
const path = require('path');
const inquirer = require('inquirer');
const ejs = require('ejs');

/**
 * 通过yarn link或npm link进行link到全局，可以通过执行my-link进行执行
 */
console.log('cli working!');

// 1. 通过命令行交互询问用户问题
// 2. 根据用户回答的结果生成文件

inquirer.prompt([
  {
    type: 'input',
    name: 'name',
    message: 'Project name?'
  }
])
.then(answers => {
  answers.name = `fed-e-task-${answers.name}`;
  console.log(answers);
  // 模板目录
  const tmplDir = path.join(__dirname, 'templates', 'homework');
  // 目标目录
  const destDir = path.join(process.cwd(), answers.name); // 将作业文件生成到对应的文件夹下

  // 将模板文件转换到目标目录
  copyDir(tmplDir, destDir, answers, (err) => {
    throw err;
  });
});

/*
 * 复制目录、子目录，及其中的文件
 * @param src {String} 要复制的目录
 * @param dist {String} 复制到目标目录
 */
function copyDir(src, dist, answers, callback) {
  fs.access(dist, function(err){
    if(err){
      // 目录不存在时创建目录
      fs.mkdirSync(dist);
    }
    _copy(null, src, dist);
  });

  function _copy(err, src, dist) {
    if(err){
      callback(err);
    } else {
      fs.readdir(src, function(err, paths) {
        if(err){
          callback(err)
        } else {
          paths.forEach(function(path) {
            var _src = src + '/' +path;
            var _dist = dist + '/' +path;
            fs.stat(_src, function(err, stat) {
              if(err) throw err;
              // 判断是文件还是目录
              if(stat.isFile()) {
                ejs.renderFile(_src, answers, (err, result) => {
                  if (err) throw err;
                  // 将结果写入目标文件
                  fs.writeFileSync(_dist, result);
                })
                // fs.writeFileSync(_dist, fs.readFileSync(_src));
              } else if(stat.isDirectory()) {
                // 当是目录是，递归复制
                copyDir(_src, _dist, callback)
              }
            })
          })
        }
      })
    }
  }
}
